package com.bird.设计原则.依赖倒置原则;

/**
 * @data 2022/1/2 12:41
 * @author: bird
 * @description: 高层模块 控制层
 * 依赖倒置原则：
 * 1：高层模块 不应该依赖低层模块
 * 2：面向抽象(接口)编程 而不是实现类编程
 */
public class Main {

//   V1 这个是典型的面向实现类编程 未遵循依赖倒置原则
//    public static void main(String[] args) {
//          Body body=new Body();
//          body.studyFGCourse();
//          body.studyJavaCourse();
//    }


    //V2  面向接口编程 遵循 依赖倒置原则 .这样就做到了 高层模块和低层模块解耦 通过接口
    //  这种方式是通过接口方法的方式 来注入具体的实现。
//    public static void main(String[] args) {
//        Body body = new Body();
//        body.studyCourse(new JavaCourse());
//        body.studyCourse(new FECourse());
//    }


    // V3 面向接口编程 遵循 依赖倒置原则
    // 这种是通过构造器的方式 来注入具体的实现
//    public static void main(String[] args) {
//        Body body = new Body(new JavaCourse());
//          body.studyCourse();
//    }


    // V4 单例模式 通过set的方式注入
    public static void main(String[] args) {

        Body body = new Body();

        body.setCourse(new JavaCourse());
        body.studyCourse();

        body.setCourse(new FECourse());
        body.studyCourse();

        body.setCourse(new PythonCourse());
        body.studyCourse();
    }
}


/*场景：
 小明在慕课网上学习课程  小明对java课程比较感兴趣 另外对前端的课程也比较感兴趣。
*
*
*
*
* */
